# 描述
# 一副扑克牌有52张牌，分别是红桃，黑桃，方片，梅花各13张，不包含大小王，现在Alex抽到了n张牌，请将扑克牌按照牌面从大到小的顺序排序。
#
# 牌的表示方法：
# 红桃(heart)用字母h表示
#
# 黑桃(spade)用字母s表示
#
# 方片(dianmond)用字母d表示
#
# 梅花(club)用字母c表示
#
#
# 2~10的牌面直接用2,3,4,5,6,7,8,9,10 表示，其余的分别为A，J，Q，K
#
# 比如方片J用dJ表示， 红桃A用hA表示
# 牌面大小：
# 2>A>K>Q>J>10>9>……>4>3
# 相同牌面的按照花色（h>s>d>c）顺序排。
#
# 输入
# 多组数据。每组数据一行，表示当前摸到的n张牌（1 < n <=52）。
# 输出
# 针对每组数据，输出一行，即排序后的结果。
# 样例输入
# h7 c10 h4 s7 c5 cA dA c4 sJ h9 hQ d8 h2 s2 d9 sA dQ c6 hA
# h7 s8 s7 c5 c8 cK sQ d2 s3 hQ d8 s10 sA d5 h10 hA
# 样例输出
# h2 s2 hA sA dA cA hQ dQ sJ c10 h9 d9 d8 h7 s7 c6 c5 h4 c4
# d2 hA sA cK hQ sQ h10 s10 s8 d8 c8 h7 s7 d5 c5 s3

card_values = {"2": 13, "3": 1, "4": 2, "5": 3, "6": 4, "7": 5, "8": 6, "9": 7, "10": 8, "J": 9, "Q": 10, "K": 11,
               "A": 12}
card_suits = {"h": 4, "s": 3, "d": 2, "c": 1}

while True:
    try:
        s = input().split(" ")
        a = []
        for i in s:
            a.append(i)

        a.sort(key=lambda x: (card_values[x[1:]], card_suits[x[0]]), reverse=True)

        for i in a:
            print(i, end=" ")
        print()
    except:
        break
